iT邦幫忙

2023 iThome 鐵人賽

DAY 27
0
Software Development

當rust 遇上 cqrs & es系列 第 27

D27 past events in sourcing

  • 分享至 

  • xImage
  •  

實作完 upcaster 在建立 EventStore時,加入with_upcasters的方式傳入即可使用:

let book_event_upcaster = BookEventUpcaster::default();
let book_store: PersistedEventStore<SurrealEventRepository, Book>
     = PersistedEventStore::new_event_store(repo.clone())
        .with_upcasters(vec![Box::new(book_event_upcaster)]);

遇到一個困難,因為使用in-memory db,程式一關掉就洗掉了。因為現在執行的程式已經是更版,無法利用現有的程式新增舊事件,所以需要再另外造一個舊結構體來存入資料庫:

#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
pub enum OldBookEvent {
    BookCreated {
        id: String,
        title: String,
        isbn10: String,
        description: String,
    },
}

寫一個function以便未來如果要添加更多事件:

pub fn old_serialized_events() -> Vec<SerializedEvent> {
    vec![
        SerializedEvent {
            aggregate_id: "test-book-1".to_string(),
            sequence: 1,
            aggregate_type: "Book".to_string(),
            event_type: "BookEvent".to_string(),
            event_version: "0.1.0".to_string(),
            payload: serde_json::to_value(OldBookEvent::BookCreated {
                id: "test-book-1".to_string(),
                title: "Rust 語言開發實戰".to_string(),
                isbn10: "1234567890".to_string(),
                description: "使用rust,併同cqrs框架,實現event sourcing".to_string(),
            }).unwrap(),
            metadata: serde_json::to_value(HashMap::<String, String>::new()).unwrap(),
        },
    ]
}

做好舊格式的事件資料的準備,之後再來測試是否可以作用


上一篇
D26 impl upcaster
下一篇
D28 test upcater
系列文
當rust 遇上 cqrs & es30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言